package util;

import com.google.common.collect.Lists;
import org.springframework.util.CollectionUtils;

import java.util.List;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.stream.Collectors;

/**
 * @Desciption:
 * @author: Jacky Chai
 * @date: 2019/5/8
 */
public class FunctionUtil {

    /**
     * 数据生产，数据转换，消费数据
     *
     * @param supplier 数据生产者
     * @param function 数据转换
     * @param consumer 数据消费
     * @param <T>
     * @param <R>
     */
    public static <T, R> void producerConvertThenConsume(Supplier<T> supplier, Function<T, R> function,
        Consumer<R> consumer) {
        T product = supplier.get();
        R result = function.apply(product);
        consumer.accept(result);
    }

    /**
     * list数据生产，数据转换
     *
     * @param supplier 数据生产者
     * @param function 数据转换
     * @param <T>
     * @param <R>
     */
    public static <T, R> List<R> producerListThenConvert(Supplier<List<T>> supplier, Function<T, R> function) {
        List<T> product = supplier.get();
        if (CollectionUtils.isEmpty(product)) {
            return Lists.newArrayList();
        }
        return product.stream()
            .map(function)
            .collect(Collectors.toList());
    }
}
